﻿package com.zhonglian.bloodpressure.utils;

import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.widget.Toast;

import com.lzy.imagepicker.ImagePicker;
import com.lzy.imagepicker.util.Utils;

import java.io.File;
import java.util.Iterator;
import java.util.List;

/**
 * Created : Yx
 * Time : 2019/1/30 12:56
 * Describe :
 */
public class PhotoGraphUtil {
    private static Uri uri;//拍照保存时使用的Uri
    private static Uri mUri;//裁切后保存时使用的Uri


    // 调用系统相机
    public static Intent startCamera(Context mContext) {
        // 调用系统的拍照功能
        uri = powerUri(mContext, mImageFile(""));
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//Intent的接受者将被准许执行read操作（Intent 携带的URI数据和任何Clipdata中特定的URIs数据)的权限。
        // 指定调用相机拍照后照片的存储路径
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        return intent;
    }

    //通过创建的文件夹及图片文件的路径，单纯的获取一个Uri
    public static Uri powerUri(Context mContext, File photoFile) {
        Uri mUri;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//7,0 + ".file.provider"
            mUri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".fileprovider", photoFile);
        } else {
            mUri = Uri.fromFile(photoFile);
            //mUri = Uri.parse("file:///" + photoFile);//裁切后保存路径
        }
        return mUri;//返回图片保存路径
    }

    /**
     * 获得一个：图片存储路径+图片名的File的路径
     */
    public static File mImageFile(String imageType) {
        //创建图片名放入文件夹路径中
        return new File(mImageFilePath().getPath());
    }

    //构建文件夹及  按时间创建了一个空图片
    public static File mImageFilePath() {
        //获得文件夹
        File takeImageFile;
        if (existSDCard()) {
            //SD卡存在
            takeImageFile = new File(Environment.getExternalStorageDirectory(), "/xxx_file/");
        } else {//不存在使用机身内存
            takeImageFile = Environment.getDataDirectory();
        }
        if (!takeImageFile.exists()) {//没有就先创建
            takeImageFile.mkdir();
        }
        takeImageFile = createFile(takeImageFile, "IMG_", ".png");
        return takeImageFile;
    }
   /**
     * 判断SDCard是否可用
     */
    public static boolean existSDCard() {
        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    }

    /**
     * 根据系统时间、前缀、后缀产生一个文件
     */
    public static File createFile(File folder, String prefix, String suffix) {
        if (!folder.exists() || !folder.isDirectory()) folder.mkdirs();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA);
        String filename = prefix + dateFormat.format(new Date(System.currentTimeMillis())) + suffix;
        return new File(folder, filename);
    }


    // 调用系统裁剪
    public static Intent startPhotoZoom(Context mContext, int size) {
//        ToastUtils.showToast(this, "=" + uris);//弹出路径
//        Log.e("aaaa", "====================" + uris);

//        Intent intent = new Intent("com.android.camera.action.CROP");
//        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
//        intent.setDataAndType(uri, "image/*");
//        // crop为true是设置在开启的intent中设置显示的view可以裁剪
//        intent.putExtra("crop", true);
//        // aspectX,aspectY是宽高的比例
//        intent.putExtra("aspectX", 1);
//        intent.putExtra("aspectY", 1);
//        // outputX,outputY是裁剪图片的宽高
//        intent.putExtra("outputX", size);
//        intent.putExtra("outputY", size);
//        // 设置是否返回数据
//        intent.putExtra("return-data", true);
//        startActivityForResult(intent, PHOTO_CUT);
        try {
            Intent intent = new Intent("com.android.camera.action.CROP");
            intent.setDataAndType(uri, "image/*");//图片的路径
            // crop为true是设置在开启的intent中设置显示的view可以剪裁
            intent.putExtra("crop", "true");
            // aspectX aspectY 是宽高的比例
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);

            // outputX,outputY 是剪裁图片的宽高
            intent.putExtra("outputX", size);
            intent.putExtra("outputY", size);
            //   intent.putExtra("return-data", true);
            mUri = powerUri(mContext, mImageFile(""));//裁切后的存储地址
            //添加这一句表示对目标应用临时授权该Uri所代表的文件
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//Intent的接受者将被准许执行read操作（Intent 携带的URI数据和任何Clipdata中特定的URIs数据)的权限。
            //为mUri获得运行时存储权限
            List resInfoList = mContext.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
            if (resInfoList.size() == 0) {
                return null;
            }
            Iterator resInfoIterator = resInfoList.iterator();
            while (resInfoIterator.hasNext()) {
                ResolveInfo resolveInfo = (ResolveInfo) resInfoIterator.next();
                String packageName = resolveInfo.activityInfo.packageName;
                mContext.grantUriPermission(packageName, mUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            }


            intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri);
            intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
            return intent;
            //startActivityForResult(intent, PHOTO_CUT);
        } catch (ActivityNotFoundException e) {
            String errorMessage = "Your device doesn't support the crop action!";
            Toast.makeText(mContext, errorMessage, Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    public static Uri getmUri() {
        return mUri;
    }

}
